package GigabitFpga

import (
	"fmt"
	"time"
)

// 启动数据接收（协程自动运行）
func (d *MTCASDR_DESCRIPTOR) StartRecvData(handler RecvDataHandler) error {
	if d.dataConn == nil {
		return fmt.Errorf("data connection not initialized")
	}
	if handler == nil {
		return fmt.Errorf("handler cannot be nil")
	}

	go func() {
		buf := make([]byte, 2048) // 根据实际包长调整，建议 2048~4096
		for {
			n, _, err := d.dataConn.ReadFromUDP(buf)
			if err != nil {
				// 网络抖动、超时等正常错误，不退出
				if handler, ok := handler.(interface{ OnError(error) }); ok {
					handler.OnError(err)
				}
				time.Sleep(time.Millisecond) // 避免空转
				continue
			}
			if n > 0 {
				// 关键：拷贝一份数据，避免竞态
				packet := make([]byte, n)
				copy(packet, buf[:n])
				handler.RecvData(packet, n)
			}
		}
	}()
	return nil
}

//type MyHandler struct{}
//
//func (h *MyHandler) RecvData(data []byte, n int) {
//	fmt.Printf("收到数据包：%d 字节\n", n)
//	// 解析帧头、处理 IQ 数据、送给解调器...
//	//processIQData(data)
//}
//
//func (h *MyHandler) OnError(err error) {
//	fmt.Printf("接收错误: %v\n", err)
//}
